package com.jz.netthings.analysis.service;

import com.jz.netthings.analysis.bean.*;
import com.baomidou.mybatisplus.service.IService;
import com.jz.netthings.exception.AdscmSystemException;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author yangyunyun
 * @since 2019-07-10
 */
public interface ProviderInfoDzjwdService extends IService<ProviderInfoDzjwd> {

    /**
     * 格式化地址，并对于没有标准地址经纬度的，查询标准地址经纬度
     * @throws Exception
     */
    void formatDz(String date) throws AdscmSystemException;

    /**
     * 查找还没有距离的标准地址，对其进行到浆站距离及预计花费时间的计算
     * @throws AdscmSystemException
     */
    void loadBaseAddressDistance() throws AdscmSystemException;
    /**
     * 获取标准地址的经纬度
     * @throws Exception
     */
    void loadFormatDzJwd() throws AdscmSystemException;
    /**
     * 获取某个标准地址的经纬度，更新或存储到表中
     * @throws Exception
     */
    void loadFormatDzJwdByAddress(String address)throws AdscmSystemException;
    /**
     * 获取所有标准地址和经纬度
     * @throws Exception
     */
    List<DzJwdBase> getAllAddress() throws AdscmSystemException;

    /**
     * 所有类型的地图统计详细数据综合查询
     * @return
     * @throws AdscmSystemException
     */
    Map<String, VillageAnalysisSupport> getAllPNumGroupByVillage() throws AdscmSystemException;

    /**
     * 查询指定日期的地图统计数据，数据包含：指定日期的新浆员、积极浆员、所有登记浆员
     * @param date
     * @return
     * @throws AdscmSystemException
     */
    Map<String, VillageAnalysisSupport> getAllPNumGroupByVillageByDate(String date) throws AdscmSystemException;

    /**
     *  装载村落综合详细统计信息（实时统计）
     * @param villageName 村落名称
     * @throws AdscmSystemException
     */
    VillageColligate loadVillageDetailMsg(String villageName)throws AdscmSystemException;
    /**
     *  查询村落综合详细统计信息（统计表中的数据）
     * @param villageName 村落名称
     * @throws AdscmSystemException
     */
    VillageColligate getVillageDetailMsg(String villageName)throws AdscmSystemException;

    /**
     * 装载指定或所有村落综合详细统计信息
     * @param villageName 村落名称
     * @throws AdscmSystemException
     */
    void loadAllVillageDetailMsg(String villageName)throws AdscmSystemException;

    /**
     * 得到某一天的体检的最快结束时间
     * @param date
     * @return
     */
    String getMinBodyCheckEndTime(String date);

    /**
     * 查询某个地方的浆员某天进站的甘特图
     * @param villageName 村落名称
     * @param date 日期
     * @param isNew 是否当天新浆员（如果为 true，则 无视isPositive条件）
     * @param isPositive 是否当天积极浆员
     * @throws AdscmSystemException
     */
    List<RegisterGtt> getGttByDateVillage(String villageName, String date, boolean isNew,boolean isPositive)throws AdscmSystemException;
}
